﻿#region Using directives
using System.Collections.Generic;
#endregion

namespace Blazorise
{
    /// <summary>
    /// Default all the theme colors. 
    /// </summary>
    /// <remarks>
    /// Source: https://htmlcolorcodes.com/color-chart/material-design-color-chart/
    /// </remarks>
    public static class ThemeColors
    {
        /// <summary>
        /// Gets the theme <see cref="ThemeColorRed">Red</see> color.
        /// </summary>
        public static ThemeColorRed Red => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorPink">Pink</see> color.
        /// </summary>
        public static ThemeColorPink Pink => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorPurple">Purple</see> color.
        /// </summary>
        public static ThemeColorPurple Purple => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorDeepPurple">Deep Purple</see> color.
        /// </summary>
        public static ThemeColorDeepPurple DeepPurple => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorIndigo">Indigo</see> color.
        /// </summary>
        public static ThemeColorIndigo Indigo => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorBlue">Blue</see> color.
        /// </summary>
        public static ThemeColorBlue Blue => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorLightBlue">Light Blue</see> color.
        /// </summary>
        public static ThemeColorLightBlue LightBlue => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorCyan">Cyan</see> color.
        /// </summary>
        public static ThemeColorCyan Cyan => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorTeal">Teal</see> color.
        /// </summary>
        public static ThemeColorTeal Teal => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorGreen">Green</see> color.
        /// </summary>
        public static ThemeColorGreen Green => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorLightGreen">Light Green</see> color.
        /// </summary>
        public static ThemeColorLightGreen LightGreen => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorLime">Lime</see> color.
        /// </summary>
        public static ThemeColorLime Lime => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorYellow">Yellow</see> color.
        /// </summary>
        public static ThemeColorYellow Yellow => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorAmber">Amber</see> color.
        /// </summary>
        public static ThemeColorAmber Amber => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorOrange">Orange</see> color.
        /// </summary>
        public static ThemeColorOrange Orange => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorDeepOrange">Deep Orange</see> color.
        /// </summary>
        public static ThemeColorDeepOrange DeepOrange => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorBrown">Brown</see> color.
        /// </summary>
        public static ThemeColorBrown Brown => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorGray">Gray</see> color.
        /// </summary>
        public static ThemeColorGray Gray => new();

        /// <summary>
        /// Gets the theme <see cref="ThemeColorBlueGray">Blue Gray</see> color.
        /// </summary>
        public static ThemeColorBlueGray BlueGray => new();

        static ThemeColors()
        {
            Items = new()
            {
                { Red.Key, Red },
                { Pink.Key, Pink },
                { Purple.Key, Purple },
                { DeepPurple.Key, DeepPurple },
                { Indigo.Key, Indigo },
                { Blue.Key, Blue },
                { LightBlue.Key, LightBlue },
                { Cyan.Key, Cyan },
                { Teal.Key, Teal },
                { Green.Key, Green },
                { LightGreen.Key, LightGreen },
                { Lime.Key, Lime },
                { Yellow.Key, Yellow },
                { Amber.Key, Amber },
                { Orange.Key, Orange },
                { DeepOrange.Key, DeepOrange },
                { Brown.Key, Brown },
                { Gray.Key, Gray },
                { BlueGray.Key, BlueGray },
            };
        }

        /// <summary>
        /// Gets or sets the map of all theme colors.
        /// </summary>
        public static Dictionary<string, ThemeColor> Items { get; set; }
    }
}
